package cn.edu.zsc.blms.service.impl.array;

import cn.edu.zsc.blms.App;
import cn.edu.zsc.blms.domain.BaseEntity;
import cn.edu.zsc.blms.domain.Reader;
import cn.edu.zsc.blms.service.ReaderService;


public class ReaderServiceImpl extends BaseServiceImpl<BaseEntity> implements ReaderService {  //可读性、健壮性、可维护性、交互性

    /**
     * 存储读者信息
     */
    public Reader[] DATA = new Reader[100];

    /**
     * ID计数器
     */
    public int idCounter;

    /**
     * 单例
     */
    private static ReaderService singleton;

    /**
     *私有构造方法
     */
    private ReaderServiceImpl(){

    }

    /**
     * 获取单例，非线程安全
     *
     * @return ReaderService单例
     */
    public static ReaderService getSingleton(){
        if(singleton == null){
            singleton = new ReaderServiceImpl();
        }
        return singleton;
    }

    /**
     * 添加读者
     */

    @Override
    public void create(){
        //TODO:添加读者
        if(idCounter >= DATA.length){
            System.out.println("读者数量已满，不能再添加");
            return;
        }
        System.out.print("请输入姓名：");
        String name = App.input.nextLine();
        System.out.print("请输入电话：");
        String phone = App.input.nextLine();
        Reader reader = new Reader(idCounter,name,phone);
        DATA[idCounter] = reader;
        System.out.println("成功增加1位读者！");
        idCounter++;
    }

    /**
     * 禁用读者
     */

    @Override
    public void disable(){   //健壮性
        //TODO:禁用读者
        System.out.print("请输入禁用的读者ID：");//交互性，正确/错误
        Reader reader = null;
        reader = getOne();
        if(reader != null){
            reader.disabled = true;
            System.out.println("该用户已被禁用");
        }
    }




    /**
     * 修改读者
     */

    @Override
    public void update(){
        //TODO:修改读者
        System.out.print("请输入要编辑的读者ID：");//交互性，正确/错误
        Reader reader = null;
        reader = (Reader) getOne();
        if(reader != null){
            System.out.print("请输入姓名，直接按回车表示不修改：");
            String name = App.input.nextLine();
            reader.name = "".equals(name) ? reader.name : name;
            System.out.print("请输入电话，直接按回车表示不修改");
            String phone = App.input.nextLine();
            reader.phone = "".equals(phone) ? reader.phone : phone;
            System.out.println("该用户已被修改");
        }
    }

    /**
     * 查询读者
     */

    @Override
    public void query(){
        //TODO：查询读者
        System.out.print("请输入要查询的读者姓名：");
        String name = App.input.nextLine();
        //TODO:根据读者姓名模糊查询，并打印查询结果，暂且打印所有读者信息
        for(int i = 0; i < idCounter; i++){
            Reader reader = (Reader) DATA[i];
            if(reader.name != null && reader.name.contains(name)){
                System.out.println(reader);
            }
        }
    }

    @Override
    public Reader getOne() {
        return null;
    }

    /**
     * 获取用户输入的有效ID值，返回-1表示用户输入的ID值是无效的
     *
     * @return ID值
     */
    public int getInputID(){  //可读性，可维护性
        if(!App.input.hasNextInt()){
            App.input.nextLine();
            System.out.println("ID为整数，请输入整数值");
            return -1;
        }
        int id = App.input.nextInt();
        App.input.nextLine();
        if (id >=idCounter || DATA[id] == null || id >= 10){
            System.out.println("不存在该ID的读者");
            return -1;
        }
        return id;
    }

}
